#include<stdio.h>
#include<signal.h>
#include<unistd.h>
void print(sigset_t* pending)
{
  int i=1;
  for(i=1;i<=31;i++)
  {
    if(sigismember(pending,i))
    {
      printf("1");
    }
    else 
    {
      printf("0");
    }
  }
  printf("\n");
}

void handler(int signo)//自定义信号动作
{
printf("hander signo:%d\n",signo);
}

int main()
{ 
  signal(2,handler);
  sigset_t set, oset;
  sigemptyset(&set);
  sigemptyset(&oset);
  sigaddset(&set,2);
  sigprocmask(SIG_SETMASK,&set,&oset);//设置阻塞2号信号

  sigset_t pending;//pending（未决）状态
  sigemptyset(&pending);
  int count = 0;
  while(1)
  {
    sigpending(&pending);//获取pending
    print(&pending);//打印pending
    sleep(1);
    count++;
    if(count==20)
    {
      sigprocmask(SIG_SETMASK,&oset,NULL);//恢复原来的设置
      printf("恢复信号屏蔽字\n");
    }
  }

  return 0;
}
